Perl正则表达式:替换一系列空格和换行符 |
您所在的位置:网站首页 › perl 删除文件 › Perl正则表达式:替换一系列空格和换行符 |
文件bar的空格仅包含空格和换行符: 1234$ cat bar 1, 2, 3, 4我想用S替换连续运行的空格(空格和换行符),即所需的输出是: 11,S2,S3,S4S但是,我的所有尝试导致 被一个S替换,紧随其后的空格被另一个S替换: 123456789101112131415$ cat bar | perl -pe 's/\s+/S/g' 1,S2,SS3,S4S $ cat bar | perl -pe 's/\s+/S/gm' 1,S2,SS3,S4S $ cat bar | perl -pe 's/\s+/S/gms' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ ]+/S/gms' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ ]+/S/gm' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ ]+/S/g' 1,S2,SS3,S4S这些是我能想到的相关正则表达式标志的所有组合:/g(全局替换),/s(让.匹配换行符)和/m(多行); 我总是在3之前有SS,在这里我只想S。 任何帮助将非常感激! perl -p逐行读取输入。 您需要立即读取整个输入,或者记住上一行是否以空格结尾。 1perl -0777 -pe 's/\s+/S/g'-0777一次读取整个文件。 1perl -pe 's/^\s+// unless 1 == $.; s/\s+/S/g;'此处,所有前导空格都将被删除(第一行除外)。 无论如何,我们知道必须在换行符之前。 相关讨论 作为后续,-0是否与-0777一样好? 以我的示例为例。 我在这里和这里都看到了有关它的讨论,可能会对unicode处理产生影响,但无法说出为什么一个或另一个可能更有意义。 只要输入不包含任何空字节,@ RyanWilliams -0都可以工作,因此在这种情况下可以使用。 -0777更好,因为无论输入内容是什么字符,它都会始终处理整个文件。 同样,-0777的含义是约定俗成的" slurp",因此经验丰富的Perl程序员可以一目了然地了解您的操作,而不必怀疑您是否故意拆分空字节。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |